const Rle = {
	encode(bytes) {
		if (bytes == null || bytes.length < 2) return bytes;
		let li = [];
		let st = 0;
		let 状态 = (bytes[0] == bytes[1]); //true.重复,false.非重复
		li.push(0); //重复次数	
		li.push(bytes[0]); //第一个元素
		for (let i = 1; i < bytes.length; i++) {
			if (状态 && bytes[i - 1] == bytes[i]) {
				if (li[st] == 0)
					li[st] = 2;
				else
					li[st]++;
				continue;
			}
			if (状态 && bytes[i - 1] != bytes[i]) {
				li.push(0x81); //重复次数
				li.push(bytes[i]); //第一个元素
				st += 2;
				状态 = false;
				continue;
			}
			if (!状态 && bytes[i - 1] == bytes[i]) {
				li.pop();
				li[st]--;
				//console.log(li[st], st, li[st] & 0x7f)
				st += (li[st] & 0x7f) + 1;
				li.push(2); //重复次数
				li.push(bytes[i]); //第一个元素
				状态 = true;
				continue;
			}
			if (!状态 && bytes[i - 1] != bytes[i]) {
				if (li[st] < 0x80)
					li[st] = 0x82;
				else
					li[st]++;
				li.push(bytes[i]); //第一个元素				
				continue;
			}
		}
		return li
	},
	decode(bytes) {
		if (bytes == null || bytes.length < 2) return bytes;		
		let li=[];
		for(let i=0;i<bytes.length;i++){
			if(bytes[i]<128){
				for (let j=0;j<bytes[i];j++){
					li.push(bytes[i+1]);
				}
				i++;						
			}else{
				let st=i;
				for (let j=128;j<bytes[st];j++){
					i++;				
					li.push(bytes[i]);
				}
			}
		}
		return li;
	}
}
export default Rle;
